package br.com.skytef.beans.WEB;

import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import br.com.skytef.beans.common.StockManager;
import br.com.skytef.dao.ProductDao;
import br.com.skytef.entity.EstoqueEntity;
import br.com.skytef.entity.ProductMerchandiseEntity;
import br.com.skytef.jdbc.ConnectionFactory;

@ManagedBean(name="EstoqueEntradaBean")
@RequestScoped
public class EstoqueEntradaBean {

	private EstoqueEntity estoque;
	public EstoqueEntity getEstoque() {return estoque;}
	public void setEstoque(EstoqueEntity estoque) {this.estoque = estoque;}

	private List<ProductMerchandiseEntity> produtos;
	public List<ProductMerchandiseEntity> getProdutos() {return produtos;}
	public void setProdutos(List<ProductMerchandiseEntity> produtos) {this.produtos = produtos;}
	
	public EstoqueEntradaBean() throws Exception {
		estoque = new EstoqueEntity();
		carregarProdutos();		
	}
			
	public void carregarProdutos() throws Exception {
		produtos = new ProductDao().getAll();
	}

	// Entrada
	public void salvarEntrada() throws Exception {
		Connection conn = new ConnectionFactory().getConnection();
		conn.setAutoCommit(false);
				
		StockManager stockManager = new StockManager(conn);
		boolean result = true;


		Timestamp timestamp = new Timestamp(System.currentTimeMillis());  
		String date = new SimpleDateFormat("hh:mm:ss").format(timestamp.getTime()); 
		try {
			estoque.setDataMov(new Timestamp(System.currentTimeMillis()));
			estoque.setHora(date);
			result = stockManager.stockInput(estoque);
			stockManager.getConnection().commit();
			if(result == true)
				this.sendMessageOk();
			else
				this.sendMessageErr("Houve um erro durante o processo.");					
		} catch (Exception e) {
			stockManager.getConnection().rollback();
			this.sendMessageErr(e.getMessage());
			result = false;
		}
		
	}
	
	public void sendMessageOk() throws SQLException, Exception {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso:"," Registro de estoque efetuada com sucesso"));
		limpar();
	}

	public void sendMessageErr(String message) throws SQLException, Exception {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro:", message));
	}
	
	public void limpar() {
		estoque.setIdProduto(0);
		estoque = new EstoqueEntity();
	}
					 		  
}
